﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Text.RegularExpressions;

namespace SIGERP_Entidades
{
    public class Usuario
    {
        public int id { get; set; }
        public String descripcion { get; set; }
        public String pass { get; internal set; }
        public String apellido { get; set; }
        public String nombre { get; set; }
        public String email { get; set; }
        public Boolean habilitado { get; set; }
        public List<Departamento> departamentos { get; set; }
        public TipoUsuario tipo { get; set; }

        public Usuario() { 
        
        }

        public void setPass(String pass) {
            string hash = generarClaveSHA1(pass);
            this.pass = hash;
        }

        private string generarClaveSHA1(string nombre)
        {

            UTF8Encoding enc = new UTF8Encoding();
            byte[] data = enc.GetBytes(nombre);
            byte[] result;

            SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
            result = sha.ComputeHash(data);
            //
            // Convertir los valores en hexadecimal
            // cuando tiene una cifra hay que rellenarlo con cero
            // para que siempre ocupen dos dígitos.
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                if (result[i] < 16)
                {
                    sb.Append("0");
                }
                sb.Append(result[i].ToString("x"));
            }
            //
            return sb.ToString().ToUpper();
        }

        public Usuario(System.Data.DataRow fila)
        {
            id = Convert.ToInt32(fila["id_usuario"]);
            descripcion = fila["nombre_de_usuario"].ToString().Trim();
            pass = fila["pass"].ToString().Trim();
            apellido = fila["apellido"].ToString().Trim();
            nombre = fila["nombre"].ToString().Trim();
            email = fila["email"].ToString().Trim();
            if (Convert.ToInt32(fila["habilitado"])==1) habilitado=true;
            else habilitado=false;           
        }

        public override string ToString()
        {
            return descripcion;
        }

        public string mostrarDepartamentos(){
            String deptos = "";
            bool tiene_deptos = false;
            foreach(Departamento d in departamentos){
            deptos +=d.descripcion+" ("+d.area+") "+" - ";
            tiene_deptos = true;
            }
            if(tiene_deptos) deptos=deptos.Substring(0,deptos.Length-2);
            return deptos;
        }

        public static Boolean validarEmail(String email)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
    }
}
